Bezeichnung


PG:ExtendedQuery -- Ermöglicht SQL-Abfragen unter Verwendung von Bindungsvariablen.


 

Übersicht


Fail, ErrorCode, fields, Result(Table) = PG:ExtendedQuery(Bind{Table}, SQL$, ConnectionID)


Beschreibung


Wie mit PG:SimpleQuery() sind mit dieser Funktion auch nur Abfragen möglich die keine Datenbank-Inhalte verändern.

Möchten Sie beispielsweise Einträge einer Tabelle verändern, benutzen Sie bitte PG:SimpleUpdate oder PG:ExtendedUpdate.


Im Gegensatz zu PG:SimpleQuery() verwendet PG:ExtendedQuery() aber Bindungsvariablen, welche vor sogenannten "SQL-Injection" schützen. SQL-Code und Benutzereingaben werden der Datenbank getrennt übergeben.


Bindungsvariablen müssen der Tabelle Bind übergeben werden!


Aufbau/Beispiel:

Index 0: Typ                ; #String, #Integer, #Double, #Float, #Short oder #BLOB

index 1: Inhalt                ; Index 0 und Index 1 entsprechen somit der SQL-Variable $1

Index 2: Typ                ; #String, #Integer, #Double, #Float, #Short oder #BLOB

index 3: Inhalt                ; Index 2 und Index 3 entsprechen somit der SQL-Variable $2


... und immer so weiter, je nachdem wie viele Variablen Sie benötigen.


Fields und Result kurz erklärt:

Angenommen fields enthält den Wert 3. Das würde bedeuten das Ihre Abfrage Ergebnisse in drei Spalten brachte.

Result[0], Result[1] und Result[2] sind  somit ein Datensatz, also eine Zeile der Tabelle.

Enthält Result noch weitere Einträge würde der zweite Datensatz bei Result[3] beginnen und bei [5] enden. usw. usw....


Eingaben


Bind

Ist eine Tabelle die Ihre Bindungsvariablen enthalten muss.


SQL$

Dieser String muss die SQL-Abfrage enthalten.


ConnectionID

               ID der Netzwerkverbindung


Rückgabewerte


Fail

True wenn ein Fehler aufgetreten ist.

False wenn alles funktioniert hat.


ErrorCode

Einen dreistelligen internen Fehlercode oder einen fünfstelligen PostgreSQL Fehlercode.

Ansonsten False.


fields

Enthält die Anzahl der Spalten einer Tabelle


Result

Result ist eine Tabelle die alle Ergebnisse der Abfrage enthält. Beginnend beim Index 0


Beispiel



/****************************************************************

**                                                             **

** Name:        1_OpenDatabase                                 **

** Author:      Michael Suther                                 **

** Date:        27.04.19                                       **

** Interpreter: Hollywood 8.0                                  **

** Function:    Lists all customers with a specific id.               **        

**                                                             **

**                                                             **

****************************************************************/


@INCLUDE "PostgreSQL_Lib.hws"


Block        

       Local Fail, fields, SQL$, i, a

       Local Errorcode

        Local Host$ = "localhost"

       Local Port = 5432

       Local Database$ = "postgres"

       Local Username$ = "test"

       Local Passwort$ = "test"

       Local Bind = {}

       Local Result = {}

       

       ;registration

       Fail, ErrorCode, ConnectionID = PG:OpenDatabase(Host$, Port, Database$, Username$, Passwort$)

       

       ; Evaluating the Return values

       If Fail = False 

               NPrint("")

               NPrint("Connection was successfully established.")

       Else

               NPrint("")

               NPrint("The connection failed.")

               NPrint("")

               NPrint("Error code:  ", ErrorCode)

       EndIf

       

       ;Create binding variables ($1)

       InsertItem(Bind, #INTEGER)

       InsertItem(Bind, 20)


       

       ;Show all customers with ID 20

       SQL$ = "SELECT vorname, name FROM Kunde WHERE id=$1"

       

       Fail, Errorcode, fields, Result = PG:ExtendedQuery(Bind, SQL$, ConnectionID)

       

       If Fail = False

               items = TableItems(Result)

               For i = 0 To items-1 Step fields

                       For a = 1 To fields

                               Print(Result[i + a-1], " ")

                       Next

                       NPrint("")

               Next                

       Else

               NPrint("Query failed.")

               NPrint("Error code:  ", ErrorCode)

       EndIf


       WaitLeftMouse        

       

       ;Close connection To the database.

       PG:CloseDatabase(ConnectionID)

EndBlock



Mit dem Personal Edition von HelpNDoc erstellt: Gratis EPub-Hersteller